#ifndef PARSERVALIDATION_H_INCLUDED
#define PARSERVALIDATION_H_INCLUDED

#include <iostream>
#include <map>

typedef std::map<std::string, std::pair<int, std::string> > Map;

#define INTEGER 0
#define FLOAT 1

using namespace std;

const Map::value_type x[] = {
    std::make_pair("representacion", std::make_pair(INTEGER, "[0-3]")),
    std::make_pair("cantidadDePoblacionesEnGpu", std::make_pair(INTEGER, "[0-)")),
    std::make_pair("cantidadDePoblacionesEnCpu", std::make_pair(INTEGER, "[0-)")),
    std::make_pair("tamanioPoblacion", std::make_pair(INTEGER, "[0-)")),
    std::make_pair("cantidadGenesPorIndividuo", std::make_pair(INTEGER, "[0-)")),
    std::make_pair("metodoDeSeleccion", std::make_pair(INTEGER, "[0-2]")),
    //std::make_pair("operadorCruzamiento" )
    //std::make_pair("operadorMutacion" )
    std::make_pair("mecanismoDeReemplazo", std::make_pair(INTEGER, "[0-1]")),
    std::make_pair("probabilidadCruzamiento", std::make_pair(FLOAT, "[0-100]")),
    std::make_pair("probabilidadMutacion", std::make_pair(FLOAT, "[0-100]")),
    std::make_pair("numeroGeneraciones", std::make_pair(INTEGER, "[1-)")),
    //std::make_pair("gradoNoUniformidad" )
    std::make_pair("bloquePorPoblacion", std::make_pair(INTEGER, "[0-1]")),
    std::make_pair("porcentajeElitismo", std::make_pair(INTEGER, "[0-100]")),
    std::make_pair("generacionesMigrar", std::make_pair(INTEGER, "[1-)")),
    std::make_pair("modoDebug", std::make_pair(INTEGER, "[0-1]")),
    //std::make_pair("cantidadIndividuosSeleccionPorRango" )
    std::make_pair("inicializacionAutomatica", std::make_pair(INTEGER, "[0-1]")),
    std::make_pair("imprimirPoblacionEntera", std::make_pair(INTEGER, "[0-1]")),
    std::make_pair("finRango", std::make_pair(FLOAT, "[:inicioRango-)"))
};

const Map m(x, x + sizeof x / sizeof x[0]);

#endif // PARSERVALIDATION_H_INCLUDED
